﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EggGame
{
    // 所有蛋仔角色的基类,定义为抽象类，
    public abstract class Egg
    {
        // 只允许派生类能访问，所有的具体行为都可以用接口IBehavior去定义，因为它们都是此接口的实现
        protected IBehavior swimBehavior;
        protected IBehavior flyBehavior;
        protected IBehavior soundBehavior;
        protected IBehavior rollBehavior;  
        // …… 游戏中的角色行为种类还有很多，此处略

        // 通过方法来给单仔的行为赋于对应的实现
        public void SetSwimBehavior(IBehavior swim)
        {
            swimBehavior = swim;
        }
        public void SetFlyBehavior(IBehavior fly)
        {
            flyBehavior = fly;
        }
        public void SetSoundBehavior(IBehavior sound)
        {
            soundBehavior = sound;
        }
        public void SetRollBehavior(IBehavior roll)
        {
            rollBehavior = roll;
        }

        // 行为操作
        // 显示蛋仔的信息
        public abstract void Display();

        // 核心行为方法的调用
        public void Swim()
        {
            swimBehavior.PerformBehavior();
        }
        public void Fly()
        {
            flyBehavior.PerformBehavior();
        }
        public void Sound()
        {
            soundBehavior.PerformBehavior();
        }
        public void Roll()
        {
            rollBehavior.PerformBehavior();
        }
    }
}
